package com.master.rn;

import java.util.ArrayList;

import com.master.bd.OSSBD;
import com.master.bd.PessoaBD;
import com.master.bd.PropostaBD;
import com.master.ed.OSSED;
import com.master.ed.PessoaED;
import com.master.ed.PropostaED;
import com.master.root.ModalBean;
import com.master.root.ProdutoBean;
import com.master.util.Excecoes;
import com.master.util.JavaUtil;
import com.master.util.bd.ExecutaSQL;
import com.master.util.bd.Transacao;
import com.master.util.ed.Parametro_FixoED;

public class OSSRN extends Transacao {

    public OSSRN() {

    }

    public OSSRN(ExecutaSQL executasql) {
		super(executasql);
	}

	public OSSED inclui(OSSED ed) throws Excecoes {

        try {
            this.inicioTransacao();
            ed = new OSSBD(this.sql).inclui(ed);
            this.fimTransacao(true);
            return ed;
        } catch (Excecoes exc) {
            this.abortaTransacao();
            throw exc;
        } catch (RuntimeException exc) {
            this.abortaTransacao();
            throw exc;
        }
    }

    public void altera(OSSED ed) throws Excecoes {

        try {
            this.inicioTransacao();
            new OSSBD(this.sql).altera(ed);
            this.fimTransacao(true);
        } catch (Excecoes exc) {
            this.abortaTransacao();
            throw exc;
        } catch (RuntimeException exc) {
            this.abortaTransacao();
            throw exc;
        }
    }

    public void deleta(OSSED ed) throws Excecoes {

        try {
            this.inicioTransacao();
            new OSSBD(this.sql).deleta(ed);
            this.fimTransacao(true);
        } catch (Excecoes exc) {
            this.abortaTransacao();
            throw exc;
        } catch (RuntimeException exc) {
            this.abortaTransacao();
            throw exc;
        }
    }

    public void cancela(OSSED ed) throws Excecoes {

        try {
            this.inicioTransacao();
            new OSSBD(this.sql).cancela(ed);
            this.fimTransacao(true);
        } catch (Excecoes exc) {
            this.abortaTransacao();
            throw exc;
        } catch (RuntimeException exc) {
            this.abortaTransacao();
            throw exc;
        }
    }

    public void finaliza(OSSED ed) throws Excecoes {

        try {
            this.inicioTransacao();
            new OSSBD(this.sql).finaliza(ed);
            this.fimTransacao(true);
        } catch (Excecoes exc) {
            this.abortaTransacao();
            throw exc;
        } catch (RuntimeException exc) {
            this.abortaTransacao();
            throw exc;
        }
    }

    public ArrayList lista(OSSED ed) throws Excecoes {

        try {
            this.inicioTransacao();
            return new OSSBD(sql).lista(ed);
        } finally {
            this.fimTransacao(false);
        }
    }

    public OSSED getByRecord(OSSED ed) throws Excecoes {

        try {
            this.inicioTransacao();
            return new OSSBD(this.sql).getByRecord(ed);
        } finally {
            this.fimTransacao(false);
        }
    }

    public OSSED buscaDadosProposta(String oid_proposta) throws Excecoes {

        try {
            this.inicioTransacao();
            PropostaED prop = new PropostaBD(this.sql).getByRecord(new PropostaED(oid_proposta));
            OSSED toReturn = new OSSED();
            toReturn.setOid_proposta(prop.getOid_proposta());
			toReturn.setNr_proposta(prop.getNr_proposta());
			toReturn.setOid_unidade(prop.getOid_unidade());
			toReturn.setCd_unidade(prop.getCd_unidade());
			toReturn.setNm_unidade(prop.getNm_unidade());
			toReturn.setOid_cliente(prop.getOid_cliente());
			toReturn.setNm_razao_social(prop.getNm_razao_social());
			toReturn.setNr_cnpj_cpf(prop.getNr_cnpj_cpf());
			toReturn.setTx_origem(prop.getNm_origem());
			toReturn.setTx_destino(prop.getNm_destino());
			toReturn.setNm_contato(prop.getNm_responsavel());
			toReturn.setNr_telefone(prop.getNr_telefone_contato());
			toReturn.setOid_pessoa_coleta(prop.getOid_cliente());
			toReturn.setNm_razao_social_coleta(prop.getNm_razao_social());
			toReturn.setNr_cnpj_cpf_coleta(prop.getNr_cnpj_cpf());
			PessoaED pes = new PessoaBD(this.sql).getByRecord(prop.getOid_cliente());
			toReturn.setOid_origem(pes.getOid_Cidade());
			toReturn.setCd_origem(pes.getCD_Cidade());
			toReturn.setNm_origem(pes.getNM_Cidade());
			toReturn.setNm_endereco_coleta(pes.getNM_Endereco());
			toReturn.setNm_bairro_coleta(pes.getNM_Bairro());

            return toReturn;
        } finally {
            this.fimTransacao(false);
        }
    }

    public OSSED buscaDadosProposta(String oid_proposta, String oid_produto) throws Excecoes {

        try {
            this.inicioTransacao();
            PropostaED prop = new PropostaBD(this.sql).getByRecord(new PropostaED(oid_proposta));
            OSSED toReturn = new OSSED();
            toReturn.setOid_proposta(prop.getOid_proposta());
			toReturn.setNr_proposta(prop.getNr_proposta());
			toReturn.setOid_unidade(prop.getOid_unidade());
			toReturn.setCd_unidade(prop.getCd_unidade());
			toReturn.setNm_unidade(prop.getNm_unidade());
			toReturn.setOid_cliente(prop.getOid_cliente());
			toReturn.setNm_razao_social(prop.getNm_razao_social());
			toReturn.setNr_cnpj_cpf(prop.getNr_cnpj_cpf());
			toReturn.setTx_origem(prop.getNm_origem());
			toReturn.setTx_destino(prop.getNm_destino());
			toReturn.setNm_contato(prop.getNm_responsavel());
			toReturn.setNr_telefone(prop.getNr_telefone_contato());
			toReturn.setOid_pessoa_coleta(prop.getOid_cliente());
			toReturn.setNm_razao_social_coleta(prop.getNm_razao_social());
			toReturn.setNr_cnpj_cpf_coleta(prop.getNr_cnpj_cpf());
			PessoaED pes = new PessoaBD(this.sql).getByRecord(prop.getOid_cliente());
			toReturn.setOid_origem(pes.getOid_Cidade());
			toReturn.setCd_origem(pes.getCD_Cidade());
			toReturn.setNm_origem(pes.getNM_Cidade());
			toReturn.setNm_endereco_coleta(pes.getNM_Endereco());
			toReturn.setNm_bairro_coleta(pes.getNM_Bairro());

			if(JavaUtil.doValida(oid_produto)){
				ProdutoBean prod = ProdutoBean.getByOIDProdutoCliente(new Integer(oid_produto).intValue(), toReturn.getOid_proposta());

				toReturn.setOid_produto(prod.getOID());
				toReturn.setCd_produto(prod.getCD_Produto());
				toReturn.setNm_produto(prod.getNM_Produto());
				toReturn.setTx_complemento_produto(prod.getDm_Stamp());
			}

			ModalBean mod = ModalBean.getByOID(Parametro_FixoED.getInstancia().getOID_Modal());

			toReturn.setOid_modal(mod.getOID());
			toReturn.setCd_modal(mod.getCD_Modal());
			toReturn.setNm_modal(mod.getNM_Modal());

            return toReturn;
        } catch (Exception exc){
        	throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "buscaDadosProduto()");
    	} finally {
            this.fimTransacao(false);
        }
    }

    protected void finalize() throws Throwable {
        super.finalize();
        if (this.sql !=  null)
            this.abortaTransacao();
    }
}
